import clone from "./gitClone.js";

import shell from "shelljs";
import fs from "fs-extra";
import { removeDir, changPackageJson, npmInstall } from "./utils.js";
import { templates, messages } from "./constants.js";
import {
  inquirerConfig,
  inquirerChoose,
  inquirerInputs,
} from "./interactive.js";
const initAction = async (name, option) => {
  console.log("option-------", option);
  //1如果要判断电脑没有按照git可以用shelljs安装判断
  if (!shell.which("git")) {
    shell.echo("对不起，你电脑没有安装git");
    shell.exit(1);
  }

  let repository = "";
  if (option.template) {
    const template = templates.find((item) => item.name === option.template);
    if (!template) {
      console.log("没有找到对应的模板");
      return;
    }
    repository = template.value;
  } else {
    const answer = await inquirerChoose("请选择模板", templates);
    repository = answer.choose;
  }

  //2,也可以判断name是否合法
  //验证名字是否存在
  //1.如果没有-f --force选项，提示用户是否删除同名文件夹
  //2.如果有-f --force选项，直接删除同名文件夹

  if (fs.existsSync(name) && !option.force) {
    console.log("已经存在文件夹");
    const answer = await inquirerConfig("是否删除同名文件夹");
    if (answer.confirm) {
      //删除
      await removeDir(name);
    } else {
      console.log("创建失败，已经存在文件夹");
    }
  } else if (fs.existsSync(name) && option.force) {
    console.log("已经存在文件夹,强制删除");
    await removeDir(name);
  }
  //下载
  console.log("repository-----", repository);
  try {
    await clone(repository, name, { clone: true });
  } catch (e) {
    console.log("下载失败");
    shell.exit(1);
  }

  //判断命令是否输入-i --ignore选项
  if (!option.ignore) {
    const answer = await inquirerInputs(messages);
    await changPackageJson(name, answer);
    //3.如果输入了，则根据输入的内容，修改package.json
    //4.如果没有输入，则使用默认值
    //5.修改package.json
    // const pkg = fs.readJsonSync(`${name}/package.json`);
    // pkg.name = answer.name;
    // pkg.version = answer.version;
    // pkg.description = answer.description;
    // fs.writeJsonSync(`${name}/package.json`, pkg)
  }
  // 6.安装依赖
  await npmInstall(name);
};
export default initAction;
